ROS2 与 PX4 Gazebo HITL仿真
ROS2 与 PX4 Gazebo HITL仿真
参考资料 :
CSDN Jetson Nano利用ROS2通过MicroDDS与PX4通讯
以下准备未完成时可能出现的问题:
进行 HIL 仿真时,启动Offboard模式时出现 check for valid position estimate报错
PX4 配置
- 通过 USB 将 自动驾驶 仪直接连接到*QGroundControl
- 启用 HITL 模式
- 打开 设置>安全 部分。
- 通过从HITL Enabled列表中选择 Enabled 来启用 HITL 模式:
- 选择机身
- 打开 “设置”>“机身”
- 选择您想要测试的 兼容机身。然后点击 机身设置页面右上角的 “应用并重启” 。
-
- 如果需要,校准您的 RC 或操纵杆。
- 设置UDP
- 在设置菜单的 常规选项 卡下,取消选中除UDP之外的所有 自动连接 框。
- (可选)配置操纵杆和故障保护。设置以下 参数 ,以便使用操纵杆代替 RC 遥控器:
COM_RC_IN_MODE 设置 为“操纵杆/无 RC 检查”。这将允许操纵杆输入并禁用 RC 输入检查
NAV_RCL_ACT 设置为“禁用”。这可确保在不使用无线电控制运行 HITL 时,不会受到任何 RC 故障保护操作的干扰。
Gazebo设置
- 使用Gazebo Classic 构建 PX4 (为了构建 Gazebo Classic 插件)。
cd <Firmware_clone>
DONT_RUN=1 make px4_sitl_default gazebo-classic
linux12 - 打开车辆 模型 的 sdf 文件(例如 Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/iris_hitl/iris_hitl.sdf )。
- 如果需要,请替换
serialDevice
参数( )。/dev/ttyACM0
串行设备取决于用于将飞行器连接到计算机的端口(通常是/dev/ttyACM0)。在 Ubuntu 上检查的一个简单方法是插入自动驾驶仪,打开终端,然后输入dmesg | grep "tty"。正确的设备将是最后显示的设备。
linux1 - 设置环境变量:
source Tools/simulation/gazebo-classic/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default
linux1 - 并以 HITL 模式运行 Gazebo Classic:
gazebo Tools/simulation/gazebo-classic/sitl_gazebo-classic/worlds/hitl_iris.world
linux1 - 启动 QGroundControl 。它应该自动连接到 PX4 和 Gazebo Classic。
2 ROS2与实机通信
重要:需要注意的是,当前ROS2在PX4V13.版本只支持fastRTPS通信,PX4V14版本开始才支持DDS通信,如果仿真过程中使用的是MircoDDS通信,想转移到实机上进行运行时,需要考虑PX4的版本是否符合实机的PX4版本,理论上来说,最好仿真的时候的PX4版本就是实机的PX4版本,笔者这里因为跟着官方教程[官方ROS2教程](https://docs.px4.io/main/en/ros2/user_guide.html),没有注意PX4的版本,直接安装了main版本的PX4,导致msg不通用
1
ROS2 与无人机的通信方式包含了:网口、串口以及其他方式
参考资料: PX4 uXRCE-DDS
DDS客户端的安装,以及如何运行DDS参考参考资料,本文只讲解进一步的,如何在实机上进行DDS的运行
- 如果使用的是串口连接,则应该在QGC中设置DDS端口应该在什么端口上运行,这一步需要根据自己的实机来,本文使用的机器是PX4 6C mini,显示有三个端口 TELEM1 TELEM2 TELEM3,但是实机上有标注的只有TELEM1,因此只能使用TELEM1,需要注意的是HIL仿真时使用的TypeC调试端口是不能作为串口使用的,此外, HIL仿真时与Gazebo通信的口与DDS通信的口是不能同一个 ,否则会报错
2. 设置端口波特率,在设置好DDS对应的端口之后才会出现对应端口的波特率设置, 需要注意的是,如果你需要高频率的控制频率如100Hz发送定点信 息,那么你需要将波特率设置的比较高一些,不然会出现无人机时不时跳出Offboard模式的情况,导致控制不稳
- MAVlink的端口与DDS的端口不能冲突,将MAVlink的端口设置为Disable
- 使用命令在机载电脑或者仿真电脑上开启DDS客户端
其中-D 后面选择端口,我这边插上TELEM1之后多出来的端口是ttyUSB0 如果想知道你自己的端口号是什么,可以插拔一下串口,然后使用
dmesg | grep "tty"
,这条命令会显示最新插拔的端口号 -b后跟着波特率921600MicroXRCEAgent serial -D /dev/ttyUSB0 -b 921600
linux1 - 使用ROS2命令在机载电脑上控制无人机